import java.util.LinkedList;
import java.util.Queue;

/**
 * @ClassName:
 * @author:
 * @Description:
 * @Date
 **/
//队列实现栈
public class MyStack {

    private Queue<Integer> queue;

    public MyStack() {
        //初始化一个队列
        queue = new LinkedList<>();
    }

    //判断队列是否为空
    public boolean empty() {
        return queue.isEmpty();
    }

    //入栈
    public void push(int e) {
        queue.add(e);
    }

    //出栈
    public int pop() {
        //最先压入栈的是队头，最先弹出的就是队尾，要取得队尾，由于队列是先进先出，所以必须先取出队列最后一个元素前的所有元素
        Queue<Integer> queue2 = new LinkedList<>();
        while (queue.size() > 1) {
            //把所有queue1中最后一个元素之前的元素全移动到queue2中
            queue2.add(queue.remove());
        }
        //queue剩下的那个就是队尾
        int e = queue.remove();
        //再把queue2的数据装回queue1中
        queue = queue2;
        return e;
    }

    //查看栈顶元素
    public int top() {
        int e = pop();
        push(e);
        return e;
    }
}
